/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef RENDER_SERVICE_MAIN_RENDER_SERVER_RS_RENDER_SINGLE_PROCESS_MANAGER_H
#define RENDER_SERVICE_MAIN_RENDER_SERVER_RS_RENDER_SINGLE_PROCESS_MANAGER_H

#include "memory"

#include "rs_render_process_manager.h"
#include "screen_manager/rs_screen_manager.h"
#include "screen_manager/screen_types.h"

namespace OHOS {
namespace Rosen {
class RSRenderService;
class RSMainThread;
class RSRenderComposerManager;
class RSRenderPipeline;
class RSScreenRenderInfo;
class RSSingleRenderProcessManager : public RSRenderProcessManager {
public:
    RSSingleRenderProcessManager(RSRenderService& renderService);
    ~RSSingleRenderProcessManager() noexcept override = default;

    sptr<IRemoteObject> OnScreenConnected(ScreenId id, const ScreenEventData& data, const RSScreenProperty& property) override;
    void OnScreenDisconnected(ScreenId id, const ScreenEventData& data) override;
    void OnScreenPropertyChanged(ScreenId id, const RSScreenProperty& property) override;
    void OnFrameRefresh() override;
    void OnVBlankIdle(ScreenId id, uint64_t ns) override;
    void OnVirtualScreenConnected(ScreenId id) override;
    void OnVirtualScreenDisconnected(ScreenId id) override;

    sptr<RSIServiceToRenderConnection> GetServiceToRenderConn(ScreenId screenId) override;
    std::vector<sptr<RSIServiceToRenderConnection>> GetServiceToRenderConns() override;
    sptr<RSIClientToRenderConnection> GetClientToRenderConn(ScreenId screenId) override;

private:
    sptr<RSIServiceToRenderConnection> serviceToRenderConnection_;
    sptr<RSIClientToRenderConnection> clientToRenderConnection_;
};
} // namespace Rosen
} // namespace OHOS

#endif // RENDER_SERVICE_MAIN_RENDER_SERVER_RS_RENDER_SINGLE_PROCESS_MANAGER_H